/**
 * 获取查询参数
 */
function getQueryParams() {
    const params = {};

    // 选择所有class为sop-param的元素
    $('.sop-param').each(function() {
        const $element = $(this);
        // 获取元素的name属性或id作为参数键名，优先使用data-key属性
        const key = $element.data('key') || $element.attr('name') || $element.attr('id');

        if (!key) return; // 没有键名则跳过

        let value;
        // 根据元素类型获取对应的值
        if ($element.is('select')) {
            // 下拉选择框
            value = $element.val() || '';
        } else if ($element.is('input[type="checkbox"]')) {
            // 复选框
            value = $element.is(':checked') ? ($element.val() || 'true') : '';
        } else if ($element.is('input[type="radio"]')) {
            // 单选框（只处理选中的）
            if ($element.is(':checked')) {
                value = $element.val() || '';
            } else {
                return; // 未选中的不处理
            }
        } else if ($element.is('input')) {
            // 其他input类型（text、number、date等）
            value = $element.val()?.trim() || '';
        } else if ($element.is('textarea')) {
            // 文本域
            value = $element.val()?.trim() || '';
        } else if ($element.is('div[contenteditable="true"]')) {
            // 可编辑div（未来可能扩展的类型）
            value = $element.text()?.trim() || '';
        } else {
            // 其他未明确指定的元素类型，默认取其value属性
            value = $element.val() || $element.text()?.trim() || '';
        }

        // 只有非空值才存入params（可根据需求调整）
        if (value !== '') {
            params[key] = value;
        }
    });
    return params;
}
/**
 * 重置查询参数
 */
function resetQueryParams() {
    // 遍历所有class为sop-param的元素
    $('.sop-param').each(function() {
        const $element = $(this);

        // 根据元素类型重置值
        if ($element.is('select')) {
            // 下拉选择框重置为默认选中项（通常是第一个option或带selected属性的）
            $element.val($element.find('option[selected]').val() || '').trigger('change');
        } else if ($element.is('input[type="checkbox"]')) {
            // 复选框重置为未选中状态（或默认选中状态）
            const defaultChecked = $element.prop('defaultChecked');
            $element.prop('checked', defaultChecked).trigger('change');
        } else if ($element.is('input[type="radio"]')) {
            // 单选框组重置为默认选中项
            const name = $element.attr('name');
            // 只处理每组中的第一个元素，避免重复操作
            if ($element.is(`input[name="${name}"]:first`)) {
                const $defaultRadio = $(`input[name="${name}"][defaultChecked]`);
                if ($defaultRadio.length) {
                    $defaultRadio.prop('checked', true).trigger('change');
                } else {
                    // 没有默认选中项时全部取消选中
                    $(`input[name="${name}"]`).prop('checked', false).trigger('change');
                }
            }
        } else if ($element.is('input')) {
            // 其他input类型（text、number等）重置为空或默认值
            const defaultValue = $element.prop('defaultValue') || '';
            $element.val(defaultValue).trigger('input');
        } else if ($element.is('textarea')) {
            // 文本域重置为空或默认值
            const defaultValue = $element.prop('defaultValue') || '';
            $element.val(defaultValue).trigger('input');
        } else if ($element.is('div[contenteditable="true"]')) {
            // 可编辑div重置为空
            $element.text('');
        } else {
            // 其他元素类型尝试重置value或文本
            if ($element.prop('value') !== undefined) {
                $element.val('').trigger('change');
            } else {
                $element.text('');
            }
        }
    });
}
/**
 * 渲染表格
 */
var TABLE_THEAD_KEYS = [];
var LIST_TOTAL = 0;
function renderTable(result) {
    let records = result.records;
    let total = result.total;
    let currentPage = result.current;
    let totalPage = result.pages;
    // 清空表格
    $('#dataTable tbody').empty();
    // 初始化表头字段
    if (TABLE_THEAD_KEYS.length === 0) {
        // 遍历表头行中的所有th元素
        $('#dataTable').find('thead tr th').each(function() {
            const $th = $(this);
            // 优先获取data-key，若不存在则获取data-field
            const key = $th.data('key') || $th.data('field');
            // 只添加有值的属性
            if (key) {
                TABLE_THEAD_KEYS.push(key);
            }
        });
        console.log('表头字段:', TABLE_THEAD_KEYS);
    }
    // 遍历数据列表
    for (let i = 0; i < records.length; i++) {
        let record = records[i];
        let tr = '<tr>';
        for (let col_index = 0; col_index < TABLE_THEAD_KEYS.length; col_index++) {
            let key = TABLE_THEAD_KEYS[col_index];
            let value = record[key];
            // 创建td元素并设置内容
            let td = '<td>'+value+'</td>';
            tr = tr + td;
        }
        tr = tr + '</tr>';
        $('#dataTable tbody').append(tr);
    }
    // 渲染分页
    renderPagination(total, currentPage, totalPage);
}
/**
 * 获取总数
 */
function getTotalPages() {
    return LIST_TOTAL;
}
/**
 * 切换分页大小
 */
function changePageSize() {
    let label_currentPage = $("#current-page");
    label_currentPage.text(0);
    $("#searchBtn").click();
}
/**
 * 前后页
 */
function addPageNum(offset) {
    let label_currentPage = $("#current-page");
    let currentPage = parseInt(label_currentPage.text());
    if (currentPage === 1) {
        return;
    }
    label_currentPage.text(currentPage + offset);
    $("#searchBtn").click();
}
/**
 * 跳转页面
 */
function gotoPageNum(pageNum){
    if (pageNum < 1) {
        pageNum = 1;
    }
    if (pageNum > getTotalPages()) {
        pageNum = getTotalPages();
    }
    let label_currentPage = $("#current-page");
    label_currentPage.text(pageNum);
    $("#searchBtn").click();
}
/**
 * 渲染分页组件
 * @param {number} total - 总数据条数
 * @param {number} currentPage - 当前页码 (通常从 1 开始)
 * @param {number} totalPage - 总页数
 */
function renderPagination(total, currentPage, totalPage) {
    // 更新总数据条数
    document.getElementById('total-count').textContent = total;

    // 更新当前页码
    document.getElementById('current-page').textContent = currentPage;

    // 更新总页数
    document.getElementById('total-pages').textContent = totalPage;
    LIST_TOTAL = total;

    // 获取上一页和下一页按钮
    const prevBtn = document.getElementById('prev-page');
    const nextBtn = document.getElementById('next-page');

    // 控制上一页按钮：当前页为第一页时禁用
    if (currentPage <= 1) {
        prevBtn.disabled = true;
        prevBtn.classList.add('disabled'); // 可选：添加样式类
    } else {
        prevBtn.disabled = false;
        prevBtn.classList.remove('disabled');
    }

    // 控制下一页按钮：当前页为最后一页时禁用
    if (currentPage >= totalPage || totalPage === 0) {
        // 注意：如果 totalPage 为 0（无数据），也应禁用下一页
        nextBtn.disabled = true;
        nextBtn.classList.add('disabled'); // 可选：添加样式类
    } else {
        nextBtn.disabled = false;
        nextBtn.classList.remove('disabled');
    }

    // 渲染页码按钮（可选：显示附近的页码，如当前页的前后各2页）
    renderPageNumbers(currentPage, totalPage);
}
/**
 * 渲染页码数字按钮（最多显示 5 个，其余用省略号）
 * @param {number} currentPage - 当前页码
 * @param {number} totalPage - 总页数
 */
function renderPageNumbers(currentPage, totalPage) {
    const pageNumbersContainer = document.getElementById('page-numbers');
    pageNumbersContainer.innerHTML = ''; // 清空现有页码

    // 如果没有数据，不显示页码
    if (totalPage <= 0) {
        pageNumbersContainer.textContent = '';
        return;
    }

    // 我们最多显示 5 个按钮
    const maxButtons = 5;
    const pages = [];

    if (totalPage <= maxButtons) {
        // 总页数不超过 5，直接显示所有页码
        for (let i = 1; i <= totalPage; i++) {
            pages.push(i);
        }
    } else {
        // 总页数超过 5，需要省略
        if (currentPage <= 3) {
            // 当前页在前 3 页：显示 1 2 3 4 5 ...
            pages.push(1, 2, 3, 4, 5);
            pages.push('...');
        } else if (currentPage >= totalPage - 2) {
            // 当前页在后 3 页：显示 ... 76 77 78 79 80
            pages.push('...');
            for (let i = totalPage - 4; i <= totalPage; i++) {
                pages.push(i);
            }
        } else {
            // 当前页在中间：显示 ... 4 5 [6] 7 8 ...
            pages.push('...');
            pages.push(currentPage - 1);
            pages.push(currentPage);
            pages.push(currentPage + 1);
            pages.push('...');
        }
    }

    // 创建按钮
    pages.forEach(page => {
        if (page === '...') {
            const span = document.createElement('span');
            span.textContent = '...';
            span.className = 'page-ellipsis';
            pageNumbersContainer.appendChild(span);
        } else {
            const btn = document.createElement('button');
            btn.type = 'button';
            btn.textContent = page;
            btn.className = 'page-number-btn';
            if (page === currentPage) {
                btn.classList.add('active');
                btn.disabled = true;
            } else {
                btn.onclick = function() {
                    gotoPageNum(page);
                };
            }
            pageNumbersContainer.appendChild(btn);
        }
    });
}
/**
 * 查询数据
 */
function query(url) {
    var params = getQueryParams();
    params.pageSize = $("#page-size").val();
    params.pageNum = $("#current-page").text();
    $.ajax({
        url: url,
        type: 'POST',
        dataType: 'json',
        contentType: 'application/json',
        data: params ? JSON.stringify(params) : null,
        timeout: 30000,
        success: function(result) {
            renderTable(result);
        },
        error: function(error) {

        }
    });
}
// 等待DOM加载完成后绑定事件
$(document).ready(function() {
    $('#resetBtn').on('click', function() {
        resetQueryParams();
    });
});
